# 单例设计模式主要是让一个类创建的对象在内存中只有一个唯一的实例， 集内存地址是相同的
# __new__ 是一个内置方法 为对象分配空间地址并返回引用  单例设计模式常用
class MusicPlayer:
    #记录第一个被创建对象的引用
    instance = None
    #记录是否执行国初始化动作
    init_flag=False
    def __new__(cls, *args, **kwargs):
        # 1  创建对象是，new方法会自动调用,若该方法不返回地址，则不会自动执行init方法
        print("创建对象，分配空间")
        # 返回内存分配引用地址
        print(super())
        if cls.instance is None:
            cls.instance = super().__new__(cls)
        return cls.instance

    # __new__ 方法执行之后自动自执行
    # 若希望次初始化方法只执行一次，则
    def __init__(self):
        #判断是否执行过初始化动作
        if MusicPlayer.init_flag:
            return
        MusicPlayer.init_flag=True
        print("创建实例，初始化方法调用")

mp = MusicPlayer()
mp2 = MusicPlayer()
print(mp)
print(mp2)
